package com.sfj.common.util;

import cn.hutool.core.util.StrUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author lcy
 * @date 2022-09-21 16:42
 */
public class ReplaceValueUtil implements StringConstants {

    // 使用正则表达式判断是否包含单个不连续的反斜杠  反斜杠需要使用双斜杠转义
    private static String SINGLE_BACK_SLASH_REGEX = "(?<!\\\\)(\\\\)(?![\\\\ntr])";


    // "|" 替换成 "-@-" """ 替换成 "\"" "\n" 替换成 "\\n""
    public static String toReplace(String value) {
        if (StrUtil.isNotBlank(value)) {
            return value.replace(PIPE, REPLACE_PIPE);
                    // .replaceAll("(?<!\\\\)\"", "\\\"")
                    //.replace("\"", "\\\"")
                    //.replace("\n", "\\n");
        } else {
            return value;
        }

    }

    // "|" 替换成 "-@-" """ 替换成 "\"" "\n" 替换成 "\\n""
    public static String runToReplace(String value) {
        if (StrUtil.isNotBlank(value)) {
            return value.replace(PIPE, REPLACE_PIPE)
             //.replaceAll("(?<!\\\\)\"", "\\\"")
            .replace("\"", "\\\"")
            .replace("\n", "\\n");
        } else {
            return value;
        }

    }

    /**
     * 将字符串中的单个不连续的反斜杠替换成正斜杠
     * PS:当参数中包含windows磁盘地址时，会存在反斜杠，在进行api节点body参数json转换时会有问题
     *
     * @param value
     * @return
     */
    public static String replaceSingleBackSlash(String value) {
        //if (StrUtil.isNotBlank(value)) {
        //    return value.replaceAll(SINGLE_BACK_SLASH_REGEX, SLASH);
        //} else {
        //    return value;
        //}
        return value;
    }

    public static String replaceTOriginal(String value) {
        if (StrUtil.isNotBlank(value)) {
            return value.replace(REPLACE_PIPE, PIPE);
        } else {
            return value;
        }
    }


    /**
     * 去除字符串中的空格、回车、换行符、制表符等
     *
     * @param str
     * @return
     */
    public static String removeSpecialChar(String str) {
        String s = "";
        if (str != null) {
            // 定义含特殊字符的正则表达式
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            s = m.replaceAll("");
        }
        return s;
    }


    /**
     * Unicode 转中文
     */
    public static String decodeUnicode(final String dataStr) {
        int start = 0;
        int end = 0;
        final StringBuffer buffer = new StringBuffer();
        while (start > -1) {
            end = dataStr.indexOf("\\u", start + 2);
            String charStr = "";
            if (end == -1) {
                charStr = dataStr.substring(start + 2, dataStr.length());
            } else {
                charStr = dataStr.substring(start + 2, end);
            }
            char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
            buffer.append(new Character(letter).toString());
            start = end;
        }
        return buffer.toString();
    }


}
